#include <iostream>

#include "iostream"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "algorithm"
#include "string"
#include "list"
#include "string.h"

int gys(int a,int b){
    if(b==0){
        return a;
    }else{
        return gys(b,a%b);
    }
}

class OneLoop {
public:
    std::vector<int> bzs;
    //村民户数，备选邮局数，
    bool run(int n) {
        bzs.resize(n);
//        bool all_even= true;

        //对应数量能否凑出
        std::vector<char> tag(10000, false);

        tag[0]=true;
        int gys_=0;
        for (int i = 0; i < n; ++i) {
            std::cin>>bzs[i];
//            if(bzs[i]%2==1){
//                all_even= false;
//            }
            if(i==0){
                gys_=bzs[i];
            }else{
                gys_= gys(gys_,bzs[i]);
            }
            for(int j=0;j<tag.size()-bzs[i];j++){
                if(tag[j]){
                    tag[bzs[i]+j]=true;
                }
            }
        }
        if(gys_!=1){
            printf("INF\n");
            return true;
        }
        int cnt=0;
        for(auto bzl:tag){
            if(!bzl){
                cnt++;
            }
        }
        printf("%d\n",cnt);
        return true;
    }
};

class Solution {
public:
    void run() {

        bool first = true;
        int64_t a, b, c, d, e;
        char cc;
        //        std::cin >> a;
//        std::string s1,s2;
//        while (1){
        while (
                std::cin>>a
//                std::getline(std::cin,s1)
//                1
                ) {
//            std::getline(std::cin,s2);
            OneLoop l;
            if (!l.run(a)) {
//                return;
            }
        }


    }
};

int main() {

    //    bool cur_num= true;
    Solution().run();
    return 0;
}

